package entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
import vo.AlumnoVO;
import vo.ContactoVO;

@Entity
@Table(name = "Alumno")
public class Alumno implements Serializable, IEntity {

    @Id
    private String username;
    private String nombre;
    private String apellido;
    private String password;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date fechaDeNacimiento;
    private String carrera;
    @OneToOne
    private Billetera billetera;
    @OneToOne
    private Calendario calendario;
    private String usuarioActivo;
    @OneToMany(mappedBy = "alumno")
    private List<Contacto> agenda;

    public AlumnoVO toVo() {
        AlumnoVO vo = new AlumnoVO();
        vo.setUsername(getUsername());
        vo.setNombre(getNombre());
        vo.setApellido(getApellido());
        vo.setPassword(getPassword());
        vo.setFechaDeNacimiento(getFechaDeNacimiento());
        vo.setCarrera(getCarrera());
        vo.setUsuarioActivo(getUsuarioActivo());
        if (getBilletera() != null) {
            vo.setBilleteraId(getBilletera().getId());
        }
        if (getCalendario() != null) {
            vo.setCalendarioId(getCalendario().getId());
        }
        vo.setContactos(contactosToVO());
        return vo;
    }
    
    private List<ContactoVO> contactosToVO (){
        List<ContactoVO> contactVO = new ArrayList<>();
        for(Contacto contact : agenda){
            contactVO.add(contact.toVo());
        }
        return contactVO;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getNombre() {
        return this.nombre;
    }

    public void setNombre(String val) {
        this.nombre = val;
    }

    public String getApellido() {
        return this.apellido;
    }

    public void setApellido(String val) {
        this.apellido = val;
    }

    public String getPassword() {
        return this.password;
    }

    public void setPassword(String val) {
        this.password = val;
    }

    public Date getFechaDeNacimiento() {
        return this.fechaDeNacimiento;
    }

    public void setFechaDeNacimiento(Date val) {
        this.fechaDeNacimiento = val;
    }

    public String getCarrera() {
        return this.carrera;
    }

    public void setCarrera(String val) {
        this.carrera = val;
    }

    public Billetera getBilletera() {
        return this.billetera;
    }

    public void setBilletera(Billetera val) {
        this.billetera = val;
    }

    public Calendario getCalendario() {
        return this.calendario;
    }

    public void setCalendario(Calendario val) {
        this.calendario = val;
    }

    public String getUsuarioActivo() {
        return usuarioActivo;
    }

    public void setUsuarioActivo(String usuarioActivo) {
        this.usuarioActivo = usuarioActivo;
    }

    public List<Contacto> getContactos() {
        return agenda;
    }

    public void setContactos(List<Contacto> contactos) {
        this.agenda = contactos;
    }
}
